package org.luxor.common.netty.annotation;

import org.luxor.common.netty.protocol.NettyContentType;
import org.luxor.common.netty.protocol.NettyQoS;
import org.springframework.core.annotation.AliasFor;

import java.lang.annotation.*;

/**
 * NettyRpcEndpoint Annotation
 *
 * @author Mr.yan @date 2023/12/18
 */
@Inherited
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface NettyEndpoint {

    /**
     * 服务唯一标识
     */
    @AliasFor(value = "path")
    String value() default "";

    /**
     * 服务唯一标识
     */
    @AliasFor(value = "value")
    String path() default "";

    /**
     * 消息服务质量类型<p>
     * 0：不保证消息送达
     * 1：确保消息至少送达1次(接收方必须回复ACK应答消息，否则会重复发送12次，直到收到ack应答)
     * 2：确保消息只送达1次
     */
    NettyQoS qosLevel() default NettyQoS.AT_MOST_ONCE;

    /**
     * 消息类型
     */
    NettyContentType contentType() default NettyContentType.JSON;

    /**
     * 字符集
     */
    String charset() default "UTF-8";

    /**
     * 所属分组(非必选)
     */
    String groupId() default "";

    /**
     * 所属分组内的优先顺序(非必选)
     */
    int order() default Integer.MAX_VALUE;
}
